<html>
    <head>
        <title>IServiceCollection 与 IServiceProcider</title>
    </head>
    <body>
        <script>
            /*
                        十五、IServiceCollection （IOC容器） 和 IServiceProvider的关系
                                    
                                
                                1、IServiceCollection
                                        IServiceCollection 是一个接口，用于表示服务的集合。
                                        在应用启动时，你会借助它来注册应用所需的各项服务。
                                        本质上，它是一个服务注册容器，能让你把服务的抽象类型（一般是接口）和具体实现类型关联起来，还能设定服务的生命周期。
                                                
                                                using Microsoft.Extensions.DependencyInjection; // 引入依赖注入相关命名空间

                                                var services = new ServiceCollection(); // 创建 IServiceCollection 的实例
                                                // 注册服务
                                                services.AddTransient<IMyService, MyService>(); // 注册一个 transient 服务


                                2、IServiceProvider

                                        IServiceProvider 也是一个接口，其作用是提供服务实例。
                                        在注册完所有服务到 IServiceCollection 之后，你可以调用 BuildServiceProvider 方法来创建一个 IServiceProvider 实例。
                                        IServiceProvider 能够依据注册的服务信息，解析并提供所需的服务实例。
                                                
                                                using Microsoft.Extensions.DependencyInjection; // 引入依赖注入相关命名空间

                                                var services = new ServiceCollection(); // 创建 IServiceCollection 的实例
                                                services.AddTransient<IMyService, MyService>(); // 注册一个 transient 服务

                                                // 创建 IServiceProvider 实例
                                                var serviceProvider = services.BuildServiceProvider();

                                                // 解析服务
                                                var myService = serviceProvider.GetService<IMyService>();
                                
                                3、二者关系
                                        先后顺序：
                                              线利用IServiceCollection 注册服务，之后再基于IServiceProvider实例。
                                        
                                        协作配合：
                                              IserviceCollection负责服务的注册，而IServiceProvider负责服务的解析。
                                              IServiceProvider依据 IServiceCollection中注册的服务信息，提供服务实例。

                                        综上所述，IServiceCollection是服务注册的起点，而 IServiceProvider则是服务解析的重点，它们共同构成了依赖注入的核心机制。
                    */
        </script>
    </body>
</html>